package haw.pr2.A3.interfaces;

import java.util.Collection;
import java.util.Set;

/**
 *
 * @author Fabian Heidorn, Alexander Kaack
 */
public interface Bounded3DimStack<E> extends Mutable {
    
    //Modifikationen

    //stapelt einen Element auf den angebenen Tier (bay,row)
    void load(int bayNo, int rowNo, E elem);
    
    //lädt einen Element auf den Stapel, bay und row wird automatisch gewählt
    void load(E elem);
    
    //lädt alle Element in der Collection.
    void loadAll(Collection<E> coll);

    //Prädikate
    
    //true, wenn kein Element enthalten
    boolean isEmpty();

    //true, wenn kein Nullelement mehr enthalten
    boolean isFull();
    
    //true, wenn kein Nullelement enthalten
    boolean tierIsEmpty(int bay, int row);
  
    //true, wenn kein Nullelement enthalten
    boolean tierIsFull(int bay, int row);

    //true, wenn object enthalten ist
    boolean contains(Object elem);

    //liefert true, wenn alle Element der Collection coll enthalten sind
    boolean containsAll(Collection<?> coll);
   
    //gibt das an der Position gestaute Element zurück.
    E get(StowageLocation loc);

    //liefert einen Set<Element> aller im Stack enthaltenen Elemente
    Set<E> getAll();

    //sucht einen Element in dem Stack und liefert die Location des Elements        
    StowageLocation locationOf(E elem);




}
